#!/bin/bash

# 移除因执行sed命令产生的中间文件
function removeTempFile() {
  # 删除以n-place结尾的临时文件
  path="$1n-place"
  [[ -f $path ]] && rm $path

  # 删除以-e结尾的临时文件
  path="$1-e"
  [[ -f $path ]] && rm $path
}

# 修改Android项目的版本号和版本代码
# $1 versionName (如 1.0.0)
# $2 versionCode (如 100)
function modifyAndroidVersion() {
  local versionName=${1:-"1.0.0"}
  local versionCode=${2:-"1"}

  # 修改app模块的build.gradle
  local gradlePath="app/build.gradle"

  # 修改versionName
  line=$(sed -n '/versionName /=' $gradlePath | head -1)
  if [[ -n "$line" ]]; then
    sed -i "${line}s/versionName .*/versionName \"$versionName\"/" $gradlePath
  fi

  # 修改versionCode
  line=$(sed -n '/versionCode /=' $gradlePath | head -1)
  if [[ -n "$line" ]]; then
    sed -i "${line}s/versionCode .*/versionCode $versionCode/" $gradlePath
  fi

  echo "Android版本已修改: versionName=$versionName, versionCode=$versionCode"
}


# 修改ios&android应用名
# $1 appNameEn 内部应用名
# $2 appNameCn 应用名
# $3 packageRes 资源包地址<icon及启动图>
function modifyAppName() {
  IFS=','

  local appName=$1
  local appNameRealName=$2
  local packageRes=$3
  local assetsName="assets"

  # 修改AndroidManifest中的应用名
  manifestPath=app/src/main/AndroidManifest.xml
  line=$(sed -n '/android:label=/=' $manifestPath | head -1)
  sed -i -e $line'd' $manifestPath
  sed -i '' $line'i\
        android:label=\"'$appNameRealName'\"
  ' $manifestPath

  # 替换应用资源
  rm -rf app/src/main/res
  rm -rf $assetsName/images/config_logo

  if [[ -z $packageRes ]]; then
    cp -r replace/"$appName"/res app/src/main/res
    cp -r replace/"$appName"/config_logo $assetsName/images/config_logo
  else
    # 下载并解压资源包
    echo "下载资源包: $packageRes"
    curl -o replace/Main.zip -L $packageRes
    unzip replace/Main.zip -d replace

    # 拷贝资源文件
    cp -r replace/Main/res app/src/main/res
    cp -r replace/Main/config_logo $assetsName/images/config_logo

    # 清理临时文件
    rm -rf replace/Main
    rm replace/Main.zip
  fi

  removeTempFile $manifestPath
  IFS=' '
}

# 原生Android打包
function package_android() {
  echo "****************** 开始Android打包 ******************"

  local packageModel=${1:-'1'}  # 打包模式
  local destPath="$2"           # 输出路径
  local sourceCodeType=${4:-'n'} # 源码类型，固定为原生(n)

  local srcPath=""
  local androidDir=$(find $(pwd) -maxdepth 1 -type d -name 'android' | head -1)

  [[ -n $androidDir ]] && cd 'android'

  echo "当前路径：$(pwd), 打包模式: $packageModel"

  # 执行Gradle打包命令
  if [[ $packageModel == '3' ]]; then
    # Google Play包 (AAB)
    ./gradlew bundleRelease
    srcPath=$(find app/build/outputs/bundle/release/ -name *.aab | head -1)
  else
    # 普通APK包
    ./gradlew assembleRelease
    srcPath=$(find app/build/outputs/apk/release/ -name *.apk | head -1)
  fi

  # 处理输出文件
  if [[ -f $srcPath ]]; then
    mkdir -p "$(dirname "$destPath")"
    mv "$srcPath" "$destPath"
    echo "****************** 打包完成 ******************"
    echo "输出路径: $destPath"

    # 使用aapt检查APK信息
    if [[ $packageModel != '3' ]]; then
      aapt dump badging "$destPath"
    fi
  else
    echo "****************** 打包失败 ******************"
    echo "未找到生成的包文件"
    return 1
  fi
}
